#ifndef __SDIO_H_
#define __SDIO_H_

#include "../PUBLIC/public.h"

#define BASE_ADDR_SD0   0xC0062000


#define SDMMCCLKENB     __REG(0xC00C0000 + 0x5000)
#define SDMMCCLKGEN0L   __REG(0xC00C0000 + 0x5004)


typedef struct SDIO_struct{
    u32 CTRL;
    u32 POWER_ENABLE;
    u32 CLKDIV;
    u32 CLK_SOURCE;
    u32 CLKENA;
    u32 TMOUT;
    u32 CTYPE;
    u32 BLKSIZ;
    u32 BYTCNT;
    u32 INTMASK;
    u32 CMDARG;
    u32 CMD;
    u32 RESP0;
    u32 RESP1;
    u32 RESP2;
    u32 RESP3;
    u32 MINTSTS;
    u32 RINTSTS;
    u32 STATUS;
    u32 FIFOTH;
    u32 CDETECT;
    u32 WRTPRT;
    u32 :32;
    u32 TCBCNT;
    u32 TBBCNT;
    u32 DEBNCE;
    u32 USRID;
    u32 VERID;
    u32 :32;
    u32 UHS_REG;
    u32 RST_n;
    u32 :32;
    u32 BMODE;
    u32 PLDMND;
    u32 DBADDR;
    u32 IDSTS;
    u32 IDINTEN;
    u32 DSCADDR;
    u32 BUFADDR;
    u32 __RSVD[25];
    u32 CARDTHRCTL;
    u32 BACK_END_POWER;
    u32 :32;
    u32 EMMC_DDR_REG;
    u32 :32;
    // u32 EMMC_DDR_REG1;
    u32 Data;
} *SDIO;

void sdio0_init();
void sdio0_ISR();

#endif
